//
//  UITextView+Category.swift
//  Swift表情键盘
//
//  Created by 王冲 on 2018/1/20.
//  Copyright © 2018年 希爱欧科技有限公司. All rights reserved.
//

import UIKit

extension UITextView
{
    // MARK: 插入表情图片或者emoji表情
    func insertEmoticon(emoticon: JKEmoticon)
    {
        // 0.删除按钮
        /*
         public var hasText: Bool { get } 判断UITextView有没有内容
         public func insertText(_ text: String) 插入内容
         public func deleteBackward() 往前删除内容
         */
        if emoticon.isRemoveButton {
           
            deleteBackward()
        }
        
        // 1.判断当前点击的是否是emoji表情
        if emoticon.emojiStr != nil{
            
            self.replace((self.selectedTextRange!), withText: emoticon.emojiStr!)
        }
        
        // 2.判断当前点击的是否是表情图片
        if emoticon.png != nil{
            
            // 1.创建表情字符串
            let imageText = JKEmoticonTextAttachment.imageText(emoticon: emoticon, font: font!)
            
            // 3.拿到当前所有的内容
            let strM = NSMutableAttributedString(attributedString: self.attributedText)
            
            // 4.插入表情到当前光标所在的位置
            let range = self.selectedRange
            strM.replaceCharacters(in: range, with: imageText)
            
            // 属性字符串有自己默认的尺寸
            strM.addAttribute(NSAttributedStringKey.font, value: font!, range: NSMakeRange(range.location, 1))
            
            // 5.将替换后的字符串赋值给UITextView
            self.attributedText = strM
            // 恢复光标所在的位置
            // 两个参数: 第一个是指定光标所在的位置, 第二个参数是选中文本的个数
            self.selectedRange = NSMakeRange(range.location + 1, 0)
            
            // 6.自己主动促发textViewDidChange方法
            delegate?.textViewDidChange!(self)
            
        }
    }
    
    // MARK: 把富文本转化可发送给服务器的文字
    func emoticonAttr() -> String
    {
        var strM = String()
        //发送服务器的文本
        attributedText.enumerateAttributes(in: NSMakeRange(0, self.attributedText.length), options: NSAttributedString.EnumerationOptions(rawValue:0)){ (objc, range, _) -> Void in
            /*
             // 遍历的时候传递给我们的objc是一个字典, 如果字典中的NSAttachment这个key有值
             // 那么就证明当前是一个图片
             print(objc["NSAttachment"])
             // range就是纯字符串的范围
             // 如果纯字符串中间有图片表情, 那么range就会传递多次
             print(range)
             let res = (self.customTextView.text as NSString).substringWithRange(range)
             print(res)
             print("++++++++++++++++++++++++++")
             */
            
            if objc[NSAttributedStringKey.init("NSAttachment")] != nil
            {
                let attachment = objc[NSAttributedStringKey.init("NSAttachment")] as! JKEmoticonTextAttachment
                // 图片
                // strM += "[图片]"
                strM += attachment.chs!
            }else
            {
                // 文字
                strM += (self.text as NSString).substring(with: range)
            }
        }
        
        return strM
    }
}
